package com.esir.android.base.mvp;


import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;

/**
 * 负责业务展示，演示。业务操作，交互管理
 * <P> P hold a M的接口实现对象-面向接口
 * <li>***Presenter 不要涉及到平台代码（这里指Android SDK)
 * <li>***Presenter 不需要知道view的内部构件（只是接口）
 * <li>***建议 定义接口时要以一个完整动作，完整闭环业务
 * <p><strong>***P层不依赖，引用平台代码***</strong></p>
 * <p><strong>***P层不依赖，引用平台代码***</strong></p>
 * <p><strong>***P层不依赖，引用平台代码***</strong></p>
 *
 * @author 黄嵘才(HuangRc)
 */
public interface IBasePresenter<V extends IBaseView, M extends IBaseModel> extends LifecycleObserver {

    void start();

    <P> void attachView(V view);

    <P> void detachView(V view);

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    void onCreate();

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    void onDestroy();

    @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
    void onLifecycleChanged();

    /**
     * 返回绑定相关的View实现
     *
     * @return View实现
     */
    V getView();

    M getModel();

    /**
     * 获取字符串资源
     * <P>获取定义在R.String中的字符串资源
     *
     * @param id 来自R.string
     * @return 字符串
     */
    String getString(int id);


}
